#include <stdio.h>
#include <time.h>
#include "../header/IA.h"


void calculAnnonce(Joueur* joueur)
{
    Annonce annonce_finale;
    int annonce_en_cours = calculAnnonceCouleur(PIQUE, joueur);
    Couleur couleur_en_cours = PIQUE;
    int annonce_calculee = calculAnnonceCouleur(COEUR, joueur);
    int points_remontes = calculAnnonceCouleur(joueur->partenaire->annonce->couleur, joueur);
    if (annonce_calculee > annonce_en_cours)
    {
        annonce_en_cours = annonce_calculee;
        couleur_en_cours = COEUR;
    }
    annonce_calculee = calculAnnonceCouleur(CARREAU, joueur);
    if (annonce_calculee > annonce_en_cours)
    {
        annonce_en_cours = annonce_calculee;
        couleur_en_cours = CARREAU;
    }
    annonce_calculee = calculAnnonceCouleur(TREFLE, joueur);
    if (annonce_calculee > annonce_en_cours)
    {
        annonce_en_cours = annonce_calculee;
        couleur_en_cours = TREFLE;
    }

    /* Pour remonter un partenaire : */

    if (points_remontes < 50)
    {
        annonce_calculee = joueur->partenaire->annonce->points + points_remontes;
    }

    if (annonce_calculee > annonce_en_cours)
    {
        annonce_en_cours = annonce_calculee;
        couleur_en_cours = joueur->partenaire->annonce->couleur;
    }

    if (annonce_en_cours < 80)
    {
        annonce_en_cours = 0;
    }

    annonce_finale.points = annonce_en_cours;
    annonce_finale.couleur = couleur_en_cours;
    annonce_finale.coinchee = 0;

    setAnnonceJoueur(&annonce_finale, joueur);

}

int calculAnnonceCouleur(Couleur couleur_annonce, Joueur *joueur)
{
  int maitre,jeu_atout,i = 0,cas,annonce;
  Jeu main_joueur; initMainJoueur(&main_joueur);
  main_joueur.jeu = getJeuMainJoueur(joueur);
  maitre = 0;
  jeu_atout = 0;
  for (i = 0; i < 8; i++)
  {
      Carte carte = main_joueur.jeu[i];
      if (getCouleur(&carte) == couleur_annonce)
      {
        switch(getRang(&carte))
        {
            case 7 : jeu_atout = jeu_atout + 1;
                     break;

            case 8 : jeu_atout = jeu_atout + 2;
                     break;

            case 9 : jeu_atout = jeu_atout + 64;
                     break;

            case 10 : jeu_atout = jeu_atout + 16;
                     break;

            case 11 : jeu_atout = jeu_atout + 128;
                     break;

            case 12 : jeu_atout = jeu_atout + 4;
                     break;

            case 13 : jeu_atout = jeu_atout + 8;
                     break;

            case 14 : jeu_atout = jeu_atout + 32;
                     break;
        }
      }
      else
      {
        if (getRang(&carte) == 14)
        {
            maitre++;
        }
      }
  }

  if (jeu_atout == 0)
  {
      cas = 0;
  }

  if (jeu_atout == 255)
  {
      cas = 1;
  }

  if ((jeu_atout == 1) || (jeu_atout == 2) || (jeu_atout == 4) || (jeu_atout == 8) || (jeu_atout == 16) || (jeu_atout == 32)
   || (jeu_atout == 64))
  {
      cas = 2;
  }

  if ((jeu_atout == 3) || (jeu_atout == 5) || (jeu_atout == 6) || (jeu_atout == 9) || (jeu_atout == 10) || (jeu_atout == 12)
   || (jeu_atout == 17) || (jeu_atout == 18) || (jeu_atout == 20) || (jeu_atout == 24) || (jeu_atout == 33) || (jeu_atout == 34)
   || (jeu_atout == 36) || (jeu_atout == 40) || (jeu_atout == 48))
  {
      cas = 3;
  }

  if ((jeu_atout == 7) || (jeu_atout == 11) || (jeu_atout == 13) || (jeu_atout == 14) || (jeu_atout == 19) || (jeu_atout == 21)
   || (jeu_atout == 22) || (jeu_atout == 25) || (jeu_atout == 26) || (jeu_atout == 28) || (jeu_atout == 35) || (jeu_atout == 37)
   || (jeu_atout == 38) || (jeu_atout == 41) || (jeu_atout == 42) || (jeu_atout == 44) || (jeu_atout == 49) || (jeu_atout == 50)
   || (jeu_atout == 52))
  {
      cas = 4;
  }

  if ((jeu_atout == 15) || (jeu_atout == 23) || (jeu_atout == 27) || (jeu_atout == 56) || (jeu_atout == 65) || (jeu_atout == 66)
   || (jeu_atout == 68) || (jeu_atout == 72) || (jeu_atout == 80) || (jeu_atout == 96))
  {
      cas = 5;
  }

  if ((jeu_atout == 59) || (jeu_atout == 71) || (jeu_atout == 83) || (jeu_atout == 85) || (jeu_atout == 86) || (jeu_atout == 87)
   || (jeu_atout == 89) || (jeu_atout == 90) || (jeu_atout == 91) || (jeu_atout == 99) || (jeu_atout == 101) || (jeu_atout == 102)
   || (jeu_atout == 105) || (jeu_atout == 106) || (jeu_atout == 131) || (jeu_atout == 133) || (jeu_atout == 134) || (jeu_atout == 135)
   || (jeu_atout == 137) || (jeu_atout == 138) || (jeu_atout == 139) || (jeu_atout == 145) || (jeu_atout == 146) || (jeu_atout == 148)
   || (jeu_atout == 152))
  {
      cas = 6;
  }

  if ((jeu_atout == 60) || (jeu_atout == 77) || (jeu_atout == 78) || (jeu_atout == 79) || (jeu_atout == 103) || (jeu_atout == 107)
   || (jeu_atout == 113) || (jeu_atout == 114) || (jeu_atout == 116) || (jeu_atout == 120) || (jeu_atout == 147) || (jeu_atout == 149)
   || (jeu_atout == 150) || (jeu_atout == 151) || (jeu_atout == 153) || (jeu_atout == 154) || (jeu_atout == 155) || (jeu_atout == 161)
   || (jeu_atout == 162) || (jeu_atout == 163) || (jeu_atout == 164) || (jeu_atout == 165) || (jeu_atout == 166) || (jeu_atout == 167)
   || (jeu_atout == 168) || (jeu_atout == 169) || (jeu_atout == 170) || (jeu_atout == 171) || (jeu_atout == 176) || (jeu_atout == 177)
   || (jeu_atout == 178) || (jeu_atout == 180) || (jeu_atout == 184) || (jeu_atout == 193) || (jeu_atout == 194) || (jeu_atout == 196)
   || (jeu_atout == 200) || (jeu_atout == 208) || (jeu_atout == 224))
  {
      cas = 7;
  }

  if ((jeu_atout == 61) || (jeu_atout == 62) || (jeu_atout == 92) || (jeu_atout == 93) || (jeu_atout == 94) || (jeu_atout == 108)
   || (jeu_atout == 115) || (jeu_atout == 117) || (jeu_atout == 118) || (jeu_atout == 121) || (jeu_atout == 122) || (jeu_atout == 140)
   || (jeu_atout == 141) || (jeu_atout == 142) || (jeu_atout == 179) || (jeu_atout == 181) || (jeu_atout == 182) || (jeu_atout == 185)
   || (jeu_atout == 186) || (jeu_atout == 195) || (jeu_atout == 197) || (jeu_atout == 198) || (jeu_atout == 201) || (jeu_atout == 202)
   || (jeu_atout == 209) || (jeu_atout == 210) || (jeu_atout == 212) || (jeu_atout == 216) || (jeu_atout == 225) || (jeu_atout == 226)
   || (jeu_atout == 228) || (jeu_atout == 232) || (jeu_atout == 240))
  {
      cas = 8;
  }

  if ((jeu_atout == 63) || (jeu_atout == 95) || (jeu_atout == 109) || (jeu_atout == 110) || (jeu_atout == 119) || (jeu_atout == 123)
   || (jeu_atout == 143) || (jeu_atout == 156) || (jeu_atout == 157) || (jeu_atout == 158) || (jeu_atout == 172))
  {
      cas = 9;
  }

  if ((jeu_atout == 111) || (jeu_atout == 124) || (jeu_atout == 159) || (jeu_atout == 173) || (jeu_atout == 174) || (jeu_atout == 188)
   || (jeu_atout == 204))
  {
      cas = 10;
  }

  if ((jeu_atout == 125) || (jeu_atout == 126))
  {
      cas = 11;
  }

  if (jeu_atout == 127)
  {
      cas = 12;
  }

  if (jeu_atout == 128)
  {
      cas = 13;
  }

  if ((jeu_atout == 29) || (jeu_atout == 30))
  {
      cas = 14;
  }

  if (jeu_atout == 31)
  {
      cas = 15;
  }

  if ((jeu_atout == 39) || (jeu_atout == 43))
  {
      cas = 16;
  }

  if ((jeu_atout == 45) || (jeu_atout == 46))
  {
      cas = 17;
  }

  if (jeu_atout == 47)
  {
      cas = 18;
  }

  if ((jeu_atout == 51) || (jeu_atout == 53) || (jeu_atout == 54) || (jeu_atout == 129) || (jeu_atout == 130) || (jeu_atout == 132)
   || (jeu_atout == 136) || (jeu_atout == 144) || (jeu_atout == 160))
  {
      cas = 19;
  }

  if ((jeu_atout == 55) || (jeu_atout == 192))
  {
      cas = 20;
  }

  if ((jeu_atout == 57) || (jeu_atout == 58) || (jeu_atout == 97) || (jeu_atout == 98) || (jeu_atout == 100) || (jeu_atout == 104)
   || (jeu_atout == 112))
  {
      cas = 21;
  }

  if ((jeu_atout == 67) || (jeu_atout == 69) || (jeu_atout == 70) || (jeu_atout == 73) || (jeu_atout == 74) || (jeu_atout == 75)
   || (jeu_atout == 81) || (jeu_atout == 82) || (jeu_atout == 84) || (jeu_atout == 88))
  {
      cas = 22;
  }

  if (jeu_atout == 76)
  {
      cas = 23;
  }

  if ((jeu_atout == 175) || (jeu_atout == 189) || (jeu_atout == 190) || (jeu_atout == 207) || (jeu_atout == 221) || (jeu_atout == 222)
   || (jeu_atout == 237) || (jeu_atout == 238) || (jeu_atout == 252))
  {
      cas = 24;
  }

  if ((jeu_atout == 183) || (jeu_atout == 187) || (jeu_atout == 215) || (jeu_atout == 219) || (jeu_atout == 231) || (jeu_atout == 235)
   || (jeu_atout == 243) || (jeu_atout == 245) || (jeu_atout == 246) || (jeu_atout == 249) || (jeu_atout == 250))
  {
      cas = 25;
  }

  if ((jeu_atout == 191) || (jeu_atout == 223) || (jeu_atout == 239) || (jeu_atout == 253) || (jeu_atout == 254))
  {
      cas = 26;
  }

  if ((jeu_atout == 199) || (jeu_atout == 203) || (jeu_atout == 211) || (jeu_atout == 213) || (jeu_atout == 214) || (jeu_atout == 217)
   || (jeu_atout == 218) || (jeu_atout == 227) || (jeu_atout == 229) || (jeu_atout == 230) || (jeu_atout == 233) || (jeu_atout == 234)
   || (jeu_atout == 241) || (jeu_atout == 242) || (jeu_atout == 244) || (jeu_atout == 248))
  {
      cas = 27;
  }

  if ((jeu_atout == 205) || (jeu_atout == 206) || (jeu_atout == 220) || (jeu_atout == 236))
  {
      cas = 28;
  }

  if ((jeu_atout == 247) || (jeu_atout == 251))
  {
      cas = 29;
  }

  switch(cas)
  {
      case 0 : annonce = 0;
               break;

      case 1 : annonce = 500;
               break;

      case 2 : annonce = (maitre - 2) * 10;
               break;

      case 3 : annonce = (maitre - 1) * 10;
               break;

      case 4 : annonce = maitre * 10;
               break;

      case 5 : annonce = (maitre + 1) * 10;
               break;

      case 6 : annonce = (maitre + 8) * 10;
               break;

      case 7 : annonce = (maitre + 9) * 10;
               break;

      case 8 : annonce = (maitre + 10) * 10;
               break;

      case 9 : annonce = (maitre + 11) * 10;
               break;

      case 10 : annonce = (maitre + 12) * 10;
               break;

      case 11 : annonce = (maitre + 13) * 10;
               break;

      case 12 : annonce = (maitre + 14) * 10;
               break;

      case 13 : annonce = (maitre + 2) * 10;
               break;

      case 14 : annonce = ((int) maitre / 3) * 50 + (maitre + 1) * 10;
               break;

      case 15 : annonce = ((int) maitre / 2) * 40 + (maitre + 3) * 10;
               break;

      case 16 : annonce = ((int) maitre / 3) * 40 + (maitre + 1) * 10;
               break;

      case 17 : annonce = ((int) maitre / 2) * 60 + (maitre + 1) * 10;
               break;

      case 18 : annonce = ((int) (maitre + 2) / 3) * 40 + (maitre + 4) * 10;
               break;

      case 19 : annonce = ((int) maitre / 2) * 40 + (maitre + 2) * 10;
               break;

      case 20 : annonce = ((int) (maitre + 2) / 3) * 40 + (maitre + 3) * 10;
               break;

      case 21 : annonce = ((int) (maitre + 2) / 3) * 50 + (maitre + 2) * 10;
               break;

      case 22 : annonce = ((int) (maitre + 2) / 3) * 60 + (maitre + 1) * 10;
               break;

      case 23 : annonce = ((int) (maitre + 2) / 3) * 70 + (maitre + 1) * 10;
               break;

      case 24 : annonce = ((int) maitre / 2) * 340 + (maitre + 14) * 10;
               break;

      case 25 : annonce = ((int) maitre / 2) * 360 + (maitre + 12) * 10;
               break;

      case 26 : annonce = ((int) (maitre + 2) / 3) * 340 + (maitre + 15) * 10;
               break;

      case 27 : annonce = ((int) maitre / 3) * 360 + (maitre + 11) * 10;
               break;

      case 28 : annonce = ((int) maitre / 3) * 340 + (maitre + 13) * 10;
               break;

      case 29 : annonce = ((int) (maitre + 2) / 3) * 360 + (maitre + 13) * 10;
               break;

      default : break;
  }

   /*printf("CAS numero : %d avec %d maitres\n", jeu_atout, maitre);*/

  if(annonce < 0)
  {
    annonce = 0;
  }

  return annonce;
}

void coincher(Joueur* joueur, Annonce* derniere_annonce)
{
    int annonce_calculee = calculAnnonceCouleur(derniere_annonce->couleur, joueur);
    if (derniere_annonce->points + annonce_calculee > 160)
    {
        joueur->annonce->points = derniere_annonce->points;
        joueur->annonce->couleur = derniere_annonce->couleur;
        joueur->annonce->coinchee = 1;
    }
}

int IAchoisitCarte(Joueur* joueur, Jeu* pli, int numero_carte_dans_pli, int num_carte_a_jouer, Couleur atout)
{
    return rand()%8;
}
